/** 
 * @addtogroup hft
 * hft
 * @{
 * 
 * @file         hft_session_interface.h
 * @brief        下线检测会话数据收发接口
 * @note    
 * @author       lixinliang
 * @date         2020-08-23
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2020-08-23  <td>1.0                   <td>lixinliang      <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */

#ifndef _HFT_SESSION_INTERFACE_H_
#define _HFT_SESSION_INTERFACE_H_

#include "ofc/ofc_types.h"

#ifdef __cplusplus
extern "C" {
#endif

typedef struct IHftSessionTag IHftSession;

/**
 * 发送数据接口
 * @param sender: 接口对象
 * @param buf: 发送数据缓存
 * @param size: 发送数据长度
 * @return -1: 发送数据失败 >=0:实际发送数据长度
 */
typedef Int32 (*IHftSessionDoSend)(IHftSession *sender, const UInt8 *buf, Int32 size);

/**
 * 接收数据接口
 * @param sender: 接口对象
 * @param buf: 接收数据缓存
 * @param size: 接收数据缓存长度
 * @return -1: 发送数据失败 >=0:实际接收数据长度
 */
typedef Int32 (*IHftSessionDoRecv)(IHftSession *sender, UInt8 *buf, Int32 size);

/**
 * 会话接口组
 */
struct IHftSessionTag
{
    IHftSessionDoSend DoDataSend; ///< 发送数据流
    IHftSessionDoRecv DoDataRecv; ///< 接收消息
};

/**
 * 发送数据接口
 * @param sender: 接口对象
 * @param buf: 发送数据缓存
 * @param size: 发送数据长度
 * @return -1: 发送数据失败 >=0:实际发送数据长度
 */
Int32 IHftSessionSend(IHftSession *self, const UInt8 *buf, Int32 size);

/**
 * 接收数据
 * @param sender: 接口对象
 * @param buf: 接收数据缓存
 * @param size: 接收数据缓存长度
 * @return -1: 发送数据失败 >=0:实际接收数据长度
 */
Int32 IHftSessionRecv(IHftSession *self, UInt8 *buf, Int32 size); 

#ifdef __cplusplus
}
#endif

#endif // _HFT_SESSION_INTERFACE_H_
/** @} */
